local deprecate_mt = {
  __index = function(t,k)
    printd(t.__deprecate_msg)
    return t.__deprecate_table[k]
  end,
  __newindex = function(t,k,v)
    printd(t.__deprecate_msg)
    t.__deprecate_table[k] = v
  end,
}

local printd = debug.print or print
 
function deprecate(o,msg)
  if type(o) == "function" then
    return function(...)
            printd(msg) 
            o(...)
           end
  else
    local dmt = getmetatable(o)
    dmt.__index = function(t,k)
      printd(t.__deprecate_msg)
      return t.__deprecate_table[k]
    end
    dmt.__newindex = function(t,k,v)
      printd(t.__deprecate_msg)
      t.__deprecate_table[k] = v
    end
    dt = {
      __deprecate_msg = msg,
      __deprecate_table = o,
    }
    setmetatable(dt,dmt)
    return dt
  end
end
